package com.it.handler;

import com.it.exception.CommonException;
import com.it.util.Result;
import com.it.util.ResultResponse;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 *  全局异常处理
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    //1、一些常见异常可以自行处理

    //2、处理页面提交表单 提交的数据：验证异常
//    @ExceptionHandler(BindException.class)
//    public ModelAndView error(BindException e, HttpServletRequest request) {
//        //返回视图
//        ModelAndView mv = new ModelAndView();
//        //默认，返回首页
//        mv.setViewName("login");
//        //所有错误信息
//        Map<String, String> errors = new HashMap<>();
//        if (e.hasErrors()) {
//            //处理错误信息,校验证请求参数错误
//            errors = ParamsValidata.validRequestOrderParameter(e.getBindingResult());
//            //返回错误消息
//            mv.addObject("errors", errors);
//            mv.addObject("fail", "输入有错，请检查");
//        }
//        //取得原始请求url,来决定当验证不通过时返回的页面
//        String requestURI = request.getRequestURI();
//        if (requestURI.equals("/accounttype/doAdd")) {
//            mv.setViewName("useradd");
//        } else if (requestURI.equals("/user/register")) {
//            mv.setViewName("register");
//        } else if (requestURI.equals("/type/doAdd")) {
//            mv.setViewName("TypeAdd");
//        } else {
//            mv.setViewName("500");//默认返回500页面
//        }
//        return mv;
//    }
    @ResponseBody
    @ExceptionHandler(BindException.class)
    public String error0(BindException e, HttpServletRequest request) {
        //返回视图
        ModelAndView mv = new ModelAndView();
        //所有错误信息
        Map<String, String> errors = new HashMap<>();
        if (e.hasErrors()) {
            //处理错误信息,校验证请求参数错误
            errors = ParamsValidata.validRequestOrderParameter(e.getBindingResult());
            //返回错误消息
            mv.addObject("errors", errors);
            mv.addObject("fail", "输入有错，请检查");
        }
        //取得原始请求url,来决定当验证不通过时返回的页面
        String requestURI = request.getRequestURI();
        if (requestURI.equals("匹配路径")) {
            mv.setViewName("你想要返回的页面");
        } else if (requestURI.equals("匹配路径")) {
            mv.setViewName("你想要返回的页面");
        } else if (requestURI.equals("匹配路径")) {
            mv.setViewName("你想要返回的页面");
        } else {
//            mv.setViewName("500");//默认返回500页面
            return mv.getModel().toString();//此处只做测试，故而只返回错误提示信息，不跳转视图，上方if/else分支仅作演示不起作用
        }
        return "=====";
    }

    @ExceptionHandler(CommonException.class)
    @ResponseBody
    public ResultResponse CommonExceptionHandler(CommonException e) {
        return Result.resuleError(e.getMsg());
    }


    ////////////////////3、处理业务异常,我们自己定义的异常///////////////////////
//    @ExceptionHandler(BusinessException.class)
//    public ModelAndView erros(BusinessException e, HttpServletRequest request) {
//        ModelAndView mv = new ModelAndView();
//        mv.addObject("cdoe", e.getCode());
//        mv.addObject("errorMsg", e.getErrMsg());
//        String requestURI = request.getRequestURI();
//        //根据原请求路径，决定返回路径
//        if (requestURI.equals("/myssmbyannotation_war/userAccount/doAdd")) {
//            mv.setViewName("useraccount/add");
//        }
//        return mv;
//    }


	/*@ExceptionHandler(BusinessException.class)
	@ResponseBody
	public Result erros(BusinessException e, HttpServletRequest request){
		Result result = new Result();
		result.setCode(e.getCode());
		result.setMessage(e.getErrMsg()); //取得是自定义异常
		return result;
	}*/

}
